/**
 * 
 */
package com.ubo.transform.java;

import com.ubo.java.model.JavaModel;
import com.ubo.java.model.PackageModel;
import com.ubo.java.model.classifier.ArrayType;
import com.ubo.java.model.classifier.ClassModel;
import com.ubo.java.model.classifier.EPrimitiveTypes;
import com.ubo.java.model.classifier.EnumClassifier;
import com.ubo.java.model.classifier.ExistingClassifier;
import com.ubo.java.model.classifier.Interface;
import com.ubo.java.model.comment.Comment;
import com.ubo.java.model.declaration.Attribut;
import com.ubo.java.model.declaration.Parameter;
import com.ubo.java.model.declaration.Variable;
import com.ubo.java.model.methode.Constructor;
import com.ubo.java.model.methode.Method;
import com.ubo.java.model.methode.Prototype;

/**
 * Interface représantant un générateur de code.
 * 
 * @author saludegu
 * 
 */
public interface IJavaVisitor<T> {

	/**
	 * Rempli le void avec le code généré.
	 * 
	 * @param generable
	 * @return
	 */
	void generate(ClassModel classModel);

	/**
	 * @param ePrimitiveTypes
	 * @return
	 */
	void generate(EPrimitiveTypes ePrimitiveTypes);

	/**
	 * @param existingClassifier
	 * @return
	 */
	void generate(ExistingClassifier existingClassifier);

	/**
	 * @param attribut
	 * @return
	 */
	void generate(Attribut attribut);

	/**
	 * @param variable
	 * @return
	 */
	void generate(Variable variable);

	/**
	 * @param parameter
	 * @return
	 */
	void generate(Parameter parameter);

	/**
	 * @param constructor
	 * @return
	 */
	void generate(Constructor constructor);

	/**
	 * @param prototype
	 * @return
	 */
	void generate(Prototype prototype);

	/**
	 * @param signature
	 * @return
	 */
	void generate(Method method);

	/**
	 * @param package1
	 * @return
	 */
	void generate(PackageModel packageModel);

	/**
	 * @param enumClassifier
	 * @return
	 */
	void generate(EnumClassifier enumClassifier);

	/**
	 * @param interface1
	 * @return
	 */
	void generate(Interface interface1);

	/**
	 * @param arrayType
	 * @return
	 */
	void generate(ArrayType arrayType);

	/**
	 * @param comment
	 * @return
	 */
	void generate(Comment comment);

	/**
	 * 
	 * @return
	 */
	T getValue();

	/**
	 * @param javaModel
	 */
	void generate(JavaModel javaModel);

}
